{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看FashionMNIST原始数据格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-30T02:47:52.085269Z",
     "start_time": "2025-06-30T02:47:52.081760Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['c:\\\\Program Files\\\\Python312\\\\python312.zip', 'c:\\\\Program Files\\\\Python312\\\\DLLs', 'c:\\\\Program Files\\\\Python312\\\\Lib', 'c:\\\\Program Files\\\\Python312', '', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\win32', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\win32\\\\lib', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\Pythonwin', 'c:\\\\Program Files\\\\Python312\\\\Lib\\\\site-packages', 'C:\\\\Users\\\\41507\\\\AppData\\\\Roaming\\\\Python\\\\Python312\\\\site-packages\\\\setuptools\\\\_vendor']\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "print(sys.path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-30T02:47:54.607816Z",
     "start_time": "2025-06-30T02:47:52.085269Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(<PIL.Image.Image image mode=L size=28x28 at 0x21B0B6B0320>, 9)\n"
     ]
    },
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAcABwBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APn+tbw1oNx4m8QWmkWx2yXD4LkZCADJJ+gFbviL4a63oc7COE3MW4hdn38duD976jNc9daDqllIsc9lKrMu4YGeMkdR7gj8KzcV7H8BtEvV16+1iWCeG1Wz8mOV02pIzupwCeuAp6Z98cZ90aIzLIlw0c0ZJ4KgjHoeOa+evjS9n/wnMcNxBPCYLKONFhA2FNzMpGenDcgd816V4K03wefC+m3NlpVhP+5QSXBiR5fMx825iMg5zwce3FdbOzTwgW90lu6uCm8eYrL02soIyCPQgggEdMGQ3cluiPNK0rJwrRQBNueuMkt+teNfGKxsdY8WWdxNqcNo66eieXMwVsb5DnH415Hp2rajpE5n02/urOUjBe3laMkehIPIrVm8eeLrhNknibVivoLtx/I1UPinxC3XXtUP1vJP8ay5JZJpGkldnduSzHJP41//2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAACS0lEQVR4AWKgA2BkYOD1ZGBgZAHZxcjIAKZBbBBm+quS8v3rj1N/GBiZGP8wMKNIMv91cnnCzuU65+X/vww8/76hSP5iMFVgZtpp2HXm8nUz02PHGUHGQTHjf9cugd//GE7f+cUo8ft0yDSEJCMDw/8TCgyMf34x/Ph3/vYfT0VphLH/GRgY3kt+Z2fl+cH5z8aSSWwHqmsZuJiZvn18p/CPkYnr7z9ZBiaofQwMjMwMPFI/frH++sr/j537K9sldhOE5H9mhnBJJg4Gbtlf7L//cQhvusaCkGT5xXDlBxsXl6rSD2Yunr9PoraeYAGZx8T4+x/DHwaGbV+/s/1/zczxm+H3P2a9jwxMDMz///z6+Y+BwW7ime9v//z78/XrXw6GbwxsX4NAYc3AICSlJhmk/oPpN+czVjbhX1zHeOz+fWR9qcnIYNkkKvCX+cMfrl+M36+HneEVVGC4x/v5GycPHxcj83GpP3+/MTB/Z2DgF0lwy3z24/49VeFfrLxsf+UBY0xqv8vDw87Ayv/4mSiTRACHIrexMdMvJjYGRlYLlpeP+X485mHje/eQ5/uPP+svKwj9+vD77y/Wf4xsaixP/z/mFvnw5jULOysHL9Mbza+P37O/+f3nN6fERwOWC+sTn937wcPGwcb88+//by/+/WX5wfPrw4fffxRfMjIweBWLv/7wl5mNhZnxPysrGysjA+NLBrZ/EpfCGJn+MTA4tYnxMzGz/GV8+f/pvy/MDP9/f2Paff0YJBAYGBg0RN/LPPx1Fx5HFDIAaCTYdiCc4RIAAAAASUVORK5CYII=",
      "text/plain": [
       "<PIL.Image.Image image mode=L size=28x28>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from torchvision import datasets, transforms\n",
    "from deeplearning_func import EarlyStopping, ModelSaver,train_classification_model,plot_learning_curves\n",
    "from deeplearning_func import evaluate_classification_model as evaluate_model\n",
    "# 加载Fashion MNIST数据集，张量就是和numpy数组一样\n",
    "transform = transforms.Compose([])\n",
    "train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transform)\n",
    "test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transform)\n",
    "print(train_dataset[0])\n",
    "train_dataset[0][0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载数据并处理为tensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-30T02:47:54.638950Z",
     "start_time": "2025-06-30T02:47:54.607816Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集形状: (60000, 28, 28)\n",
      "训练集标签数量: 60000\n",
      "测试集形状: (10000, 28, 28)\n",
      "测试集标签数量: 10000\n"
     ]
    }
   ],
   "source": [
    "# 加载Fashion MNIST数据集，张量就是和numpy数组一样\n",
    "\n",
    "train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transforms.ToTensor())\n",
    "test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transforms.ToTensor())\n",
    "\n",
    "# 获取图像和标签\n",
    "# 注意：由于使用了transform，图像已经被转换为张量且标准化\n",
    "# 我们需要从dataset中提取原始图像用于显示\n",
    "train_images = train_dataset.data.numpy()\n",
    "train_labels = train_dataset.targets.numpy()\n",
    "test_images = test_dataset.data.numpy()\n",
    "test_labels = test_dataset.targets.numpy()\n",
    "\n",
    "# 定义类别名称\n",
    "class_names = ['T-shirt/top', '裤子', '套头衫', '连衣裙', '外套',\n",
    "               '凉鞋', '衬衫', '运动鞋', '包', '短靴']\n",
    "\n",
    "# 查看数据集基本信息\n",
    "print(f\"训练集形状: {train_images.shape}\")\n",
    "print(f\"训练集标签数量: {len(train_labels)}\")\n",
    "print(f\"测试集形状: {test_images.shape}\")\n",
    "print(f\"测试集标签数量: {len(test_labels)}\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 把数据集划分为训练集55000和验证集5000，并给DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-30T02:47:54.643977Z",
     "start_time": "2025-06-30T02:47:54.639461Z"
    }
   },
   "outputs": [],
   "source": [
    "# 从训练集中划分出验证集\n",
    "train_size = 55000\n",
    "val_size = 5000\n",
    "# 设置随机种子以确保每次得到相同的随机划分结果\n",
    "generator = torch.Generator().manual_seed(42)\n",
    "train_subset, val_subset = torch.utils.data.random_split(\n",
    "    train_dataset, \n",
    "    [train_size, val_size],\n",
    "    generator=generator #设置随机种子，确保每次得到相同的随机划分结果\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-30T02:48:10.867590Z",
     "start_time": "2025-06-30T02:48:09.235191Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([55000, 1, 28, 28])\n",
      "训练数据集均值: 0.2856\n",
      "训练数据集标准差: 0.3527\n",
      "数据集中图像总数: 55000\n"
     ]
    }
   ],
   "source": [
    "def calculate_mean_std(train_dataset):\n",
    "    # 首先将所有图像数据堆叠为一个大张量\n",
    "    all_images = torch.stack([img_tensor for img_tensor, _ in train_dataset])\n",
    "    print(all_images.shape)\n",
    "    # 计算通道维度上的均值和标准差\n",
    "    # Fashion MNIST是灰度图像，只有一个通道\n",
    "    # 对所有像素值计算均值和标准差\n",
    "    mean = torch.mean(all_images)\n",
    "    std = torch.std(all_images)\n",
    "\n",
    "    print(f\"训练数据集均值: {mean.item():.4f}\")\n",
    "    print(f\"训练数据集标准差: {std.item():.4f}\")\n",
    "\n",
    "    # 检查数据集大小\n",
    "    print(f\"数据集中图像总数: {len(train_dataset)}\")\n",
    "calculate_mean_std(train_subset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集大小: 55000\n",
      "验证集大小: 5000\n",
      "测试集大小: 10000\n",
      "批次大小: 64\n",
      "训练批次数: 860\n"
     ]
    }
   ],
   "source": [
    "# 创建数据加载器\n",
    "batch_size = 64\n",
    "train_loader = torch.utils.data.DataLoader(\n",
    "    train_subset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=True #打乱数据集，每次迭代时，数据集的顺序都会被打乱\n",
    ")\n",
    "\n",
    "val_loader = torch.utils.data.DataLoader(\n",
    "    val_subset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=False\n",
    ")\n",
    "\n",
    "test_loader = torch.utils.data.DataLoader(\n",
    "    test_dataset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=False\n",
    ")\n",
    "\n",
    "# 打印数据集大小信息\n",
    "print(f\"训练集大小: {len(train_subset)}\")\n",
    "print(f\"验证集大小: {len(val_subset)}\")\n",
    "print(f\"测试集大小: {len(test_dataset)}\")\n",
    "print(f\"批次大小: {batch_size}\")\n",
    "print(f\"训练批次数: {len(train_loader)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:33.148120Z",
     "start_time": "2025-06-26T01:43:33.145230Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "55040"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "64*860"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 搭建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([20, 100])\n"
     ]
    }
   ],
   "source": [
    "#理解每个接口的方法，单独写例子\n",
    "import torch.nn as nn\n",
    "m=nn.BatchNorm1d(100)\n",
    "x=torch.randn(20,100)\n",
    "print(m(x).shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:33.152657Z",
     "start_time": "2025-06-26T01:43:33.148120Z"
    }
   },
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        #normalize\n",
    "        self.transform = nn.Sequential(\n",
    "            transforms.Normalize([0.2856], [0.3527])\n",
    "        )\n",
    "\n",
    "        # 第一组卷积层 - 32个卷积核\n",
    "        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1) # 输入通道数，输出通道数代表的是卷积核的个数\n",
    "        self.conv2 = nn.Conv2d(32, 32, kernel_size=3, padding=1)\n",
    "        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n",
    "        \n",
    "        # 第二组卷积层 - 64个卷积核\n",
    "        self.conv3 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n",
    "        self.conv4 = nn.Conv2d(64, 64, kernel_size=3, padding=1)\n",
    "\n",
    "        \n",
    "        # 第三组卷积层 - 128个卷积核\n",
    "        self.conv5 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n",
    "        self.conv6 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n",
    "\n",
    "        \n",
    "        # 计算全连接层的输入特征数\n",
    "        # 经过3次池化，图像尺寸从28x28变为3x3x128\n",
    "        self.fc1 = nn.Linear(128 * 3 * 3, 256)\n",
    "        self.fc2 = nn.Linear(256, 10)\n",
    "        \n",
    "        # 初始化权重\n",
    "        self.init_weights()\n",
    "        \n",
    "    def init_weights(self):\n",
    "        \"\"\"使用 xavier 均匀分布来初始化卷积层和全连接层的权重\"\"\"\n",
    "        for m in self.modules():\n",
    "            if isinstance(m, nn.Conv2d) or isinstance(m, nn.Linear):\n",
    "                nn.init.xavier_uniform_(m.weight)\n",
    "                if m.bias is not None:\n",
    "                    nn.init.zeros_(m.bias)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        # x.shape [batch size, 1, 28, 28]\n",
    "        x=self.transform(x)\n",
    "        # 第一组卷积层\n",
    "        x = F.relu(self.conv1(x))\n",
    "        # print(f\"conv1后的形状: {x.shape}\")\n",
    "        x = F.relu(self.conv2(x))\n",
    "        # print(f\"conv2后的形状: {x.shape}\")\n",
    "        x = self.pool(x)\n",
    "        # print(f\"pool1后的形状: {x.shape}\")\n",
    "        \n",
    "        # 第二组卷积层\n",
    "        x = F.relu(self.conv3(x))\n",
    "        # print(f\"conv3后的形状: {x.shape}\")\n",
    "        x = F.relu(self.conv4(x))\n",
    "        # print(f\"conv4后的形状: {x.shape}\")\n",
    "        x = self.pool(x)\n",
    "        # print(f\"pool2后的形状: {x.shape}\")\n",
    "        \n",
    "        # 第三组卷积层\n",
    "        x = F.relu(self.conv5(x))\n",
    "        # print(f\"conv5后的形状: {x.shape}\")\n",
    "        x = F.relu(self.conv6(x))\n",
    "        # print(f\"conv6后的形状: {x.shape}\")\n",
    "        x = self.pool(x)\n",
    "        # print(f\"pool3后的形状: {x.shape}\")\n",
    "        \n",
    "        # 展平\n",
    "        x = x.view(x.size(0), -1)\n",
    "        # print(f\"展平后的形状: {x.shape}\")\n",
    "        \n",
    "        # 全连接层\n",
    "        x = F.relu(self.fc1(x))\n",
    "        # print(f\"fc1后的形状: {x.shape}\")\n",
    "        x = self.fc2(x)\n",
    "        # print(f\"fc2后的形状: {x.shape}\")\n",
    "        \n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:33.185031Z",
     "start_time": "2025-06-26T01:43:33.152657Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "批次图像形状: torch.Size([64, 1, 28, 28])\n",
      "批次标签形状: torch.Size([64])\n",
      "----------------------------------------------------------------------------------------------------\n",
      "torch.Size([64, 10])\n"
     ]
    }
   ],
   "source": [
    "# 实例化模型\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 从train_loader获取第一个批次的数据\n",
    "dataiter = iter(train_loader)\n",
    "images, labels = next(dataiter)\n",
    "\n",
    "# 查看批次数据的形状\n",
    "print(\"批次图像形状:\", images.shape)\n",
    "print(\"批次标签形状:\", labels.shape)\n",
    "\n",
    "\n",
    "print('-'*100)\n",
    "# 进行前向传播\n",
    "with torch.no_grad():  # 不需要计算梯度\n",
    "    outputs = model(images)\n",
    "    \n",
    "\n",
    "print(outputs.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:33.203053Z",
     "start_time": "2025-06-26T01:43:33.199532Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "需要求梯度的参数总量: 584170\n",
      "模型总参数量: 584170\n",
      "\n",
      "各层参数量明细:\n",
      "conv1.weight: 288 参数\n",
      "conv1.bias: 32 参数\n",
      "conv2.weight: 9216 参数\n",
      "conv2.bias: 32 参数\n",
      "conv3.weight: 18432 参数\n",
      "conv3.bias: 64 参数\n",
      "conv4.weight: 36864 参数\n",
      "conv4.bias: 64 参数\n",
      "conv5.weight: 73728 参数\n",
      "conv5.bias: 128 参数\n",
      "conv6.weight: 147456 参数\n",
      "conv6.bias: 128 参数\n",
      "fc1.weight: 294912 参数\n",
      "fc1.bias: 256 参数\n",
      "fc2.weight: 2560 参数\n",
      "fc2.bias: 10 参数\n"
     ]
    }
   ],
   "source": [
    "# 计算模型的总参数量\n",
    "# 统计需要求梯度的参数总量\n",
    "total_params = sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
    "print(f\"需要求梯度的参数总量: {total_params}\")\n",
    "\n",
    "# 统计所有参数总量\n",
    "all_params = sum(p.numel() for p in model.parameters())\n",
    "print(f\"模型总参数量: {all_params}\")\n",
    "\n",
    "# 查看每层参数量明细\n",
    "print(\"\\n各层参数量明细:\")\n",
    "for name, param in model.named_parameters():\n",
    "    print(f\"{name}: {param.numel()} 参数\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "294912"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "128*3*3*256"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 各层参数量明细:\n",
    "conv1.weight: 288 参数 3*3*1*32\n",
    "conv1.bias: 32 参数\n",
    "conv2.weight: 9216 参数 3*3*32*32\n",
    "conv2.bias: 32 参数  \n",
    "conv3.weight: 18432 参数 3*3*32*64\n",
    "conv3.bias: 64 参数\n",
    "conv4.weight: 36864 参数  3*3*64*64\n",
    "conv4.bias: 64 参数\n",
    "conv5.weight: 73728 参数\n",
    "conv5.bias: 128 参数\n",
    "conv6.weight: 147456 参数\n",
    "conv6.bias: 128 参数\n",
    "fc1.weight: 294912 参数 128*3*3*256\n",
    "fc1.bias: 256 参数\n",
    "fc2.weight: 2560 参数\n",
    "fc2.bias: 10 参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:33.217395Z",
     "start_time": "2025-06-26T01:43:33.203561Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('conv1.weight',\n",
       "              tensor([[[[-0.0099, -0.0911, -0.0808],\n",
       "                        [ 0.0518,  0.0939, -0.0008],\n",
       "                        [-0.0281,  0.1327, -0.0298]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.1108,  0.0499, -0.1034],\n",
       "                        [ 0.0042,  0.0670,  0.1060],\n",
       "                        [ 0.0180, -0.0636, -0.1203]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0262, -0.1017,  0.0853],\n",
       "                        [-0.0567, -0.0669, -0.0808],\n",
       "                        [ 0.0634, -0.1024,  0.1251]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0011,  0.0858, -0.1183],\n",
       "                        [ 0.1161,  0.0453, -0.1143],\n",
       "                        [-0.1072, -0.0525,  0.1325]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0677, -0.0961, -0.0584],\n",
       "                        [-0.0242,  0.0751,  0.1146],\n",
       "                        [-0.1278, -0.1271, -0.0022]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.1165,  0.0618, -0.0429],\n",
       "                        [-0.0550,  0.1352, -0.1279],\n",
       "                        [-0.1360,  0.0278,  0.0991]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.1410, -0.0016, -0.0885],\n",
       "                        [ 0.0498, -0.0876, -0.0312],\n",
       "                        [-0.1177,  0.0904,  0.0013]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.1181,  0.1275,  0.1107],\n",
       "                        [ 0.0380,  0.0577,  0.0336],\n",
       "                        [ 0.0048, -0.0952,  0.0165]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0404,  0.0037, -0.1194],\n",
       "                        [-0.0140, -0.1152, -0.0281],\n",
       "                        [-0.1129, -0.0158, -0.0042]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0051,  0.1177,  0.0712],\n",
       "                        [-0.0683,  0.1073,  0.1249],\n",
       "                        [ 0.1264, -0.0603, -0.1047]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0796, -0.0613,  0.0730],\n",
       "                        [ 0.1318, -0.0785,  0.1129],\n",
       "                        [-0.1042, -0.1187, -0.1380]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0027, -0.0035,  0.0586],\n",
       "                        [-0.0643,  0.0709, -0.1408],\n",
       "                        [ 0.0771, -0.0768,  0.1110]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0678,  0.0383,  0.0286],\n",
       "                        [-0.0700,  0.0868, -0.0665],\n",
       "                        [ 0.1158,  0.0043,  0.1257]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.1045, -0.0360, -0.0848],\n",
       "                        [-0.0902,  0.0847, -0.0589],\n",
       "                        [-0.0195, -0.1411,  0.0747]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0945,  0.0468,  0.1151],\n",
       "                        [ 0.0363, -0.0286, -0.0822],\n",
       "                        [-0.0579, -0.0482,  0.1199]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0025, -0.0805, -0.0894],\n",
       "                        [ 0.0584,  0.0524,  0.0716],\n",
       "                        [ 0.0700,  0.0071,  0.0354]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0005,  0.1054,  0.0065],\n",
       "                        [ 0.0961, -0.0676,  0.1278],\n",
       "                        [ 0.0024, -0.0889, -0.0688]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0536,  0.1285, -0.0667],\n",
       "                        [-0.1205, -0.0836, -0.0347],\n",
       "                        [ 0.1226, -0.1402, -0.0585]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0580,  0.0964,  0.0825],\n",
       "                        [-0.0554,  0.0942, -0.1370],\n",
       "                        [-0.1303, -0.0401,  0.0135]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0569,  0.0956,  0.0431],\n",
       "                        [ 0.0212, -0.1369,  0.0197],\n",
       "                        [-0.0711,  0.1149, -0.0112]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0348,  0.0742,  0.0178],\n",
       "                        [ 0.1265, -0.1406,  0.0777],\n",
       "                        [ 0.0589, -0.0638, -0.0750]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0041,  0.0945,  0.0928],\n",
       "                        [-0.1039,  0.1180,  0.1188],\n",
       "                        [ 0.0251, -0.1415, -0.1071]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.1113,  0.1199,  0.0419],\n",
       "                        [ 0.0912, -0.1156,  0.0386],\n",
       "                        [-0.0652, -0.0520, -0.1192]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0212, -0.0869,  0.0708],\n",
       "                        [ 0.1263,  0.0867, -0.1413],\n",
       "                        [ 0.0413,  0.0828,  0.0984]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.1341,  0.0352,  0.0542],\n",
       "                        [-0.0041,  0.0307,  0.1375],\n",
       "                        [ 0.0883, -0.0512,  0.1062]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0749, -0.0533,  0.1309],\n",
       "                        [ 0.0185, -0.0644, -0.0122],\n",
       "                        [-0.0763,  0.0540,  0.0031]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0928, -0.0856, -0.1248],\n",
       "                        [-0.0091, -0.0109, -0.0069],\n",
       "                        [-0.0855, -0.1418,  0.0454]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.1200, -0.1187, -0.0950],\n",
       "                        [-0.1255,  0.0513, -0.0437],\n",
       "                        [-0.0639,  0.0011, -0.0679]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0258,  0.0397,  0.0137],\n",
       "                        [-0.0196, -0.0447,  0.0215],\n",
       "                        [-0.0416,  0.0654, -0.0320]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.1100, -0.0064, -0.0572],\n",
       "                        [-0.0406, -0.0954, -0.0885],\n",
       "                        [-0.0233, -0.1221,  0.1168]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0935, -0.1406, -0.0849],\n",
       "                        [-0.1235, -0.0417, -0.0299],\n",
       "                        [ 0.0933,  0.1109, -0.0384]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0246, -0.0116, -0.0876],\n",
       "                        [ 0.1083, -0.0243, -0.1391],\n",
       "                        [ 0.1168, -0.0679, -0.0035]]]])),\n",
       "             ('conv1.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('conv2.weight',\n",
       "              tensor([[[[-0.0614, -0.0336,  0.0209],\n",
       "                        [-0.0132, -0.0930, -0.0731],\n",
       "                        [-0.0353,  0.0787,  0.0729]],\n",
       "              \n",
       "                       [[ 0.0121, -0.0125,  0.0534],\n",
       "                        [ 0.0542,  0.0317,  0.0980],\n",
       "                        [-0.0620, -0.0508,  0.0996]],\n",
       "              \n",
       "                       [[ 0.0822, -0.0926,  0.0154],\n",
       "                        [-0.0526, -0.0166, -0.0817],\n",
       "                        [ 0.0928,  0.0155, -0.0844]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0034, -0.0755,  0.0010],\n",
       "                        [ 0.0548, -0.0290, -0.0895],\n",
       "                        [ 0.0658, -0.0009, -0.0232]],\n",
       "              \n",
       "                       [[-0.0512,  0.0499, -0.0488],\n",
       "                        [ 0.0522,  0.0588,  0.0295],\n",
       "                        [-0.0192, -0.0221,  0.0361]],\n",
       "              \n",
       "                       [[-0.0723,  0.0796,  0.0195],\n",
       "                        [-0.0807, -0.0576,  0.0611],\n",
       "                        [-0.0683,  0.0214,  0.0592]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0946,  0.0350,  0.0981],\n",
       "                        [-0.0854, -0.0635, -0.0793],\n",
       "                        [-0.0709, -0.0808, -0.0385]],\n",
       "              \n",
       "                       [[ 0.0541,  0.0208,  0.0130],\n",
       "                        [-0.0376,  0.0045, -0.0770],\n",
       "                        [ 0.0800,  0.0899, -0.0547]],\n",
       "              \n",
       "                       [[-0.0810,  0.0532, -0.0228],\n",
       "                        [-0.0748, -0.0007, -0.0749],\n",
       "                        [-0.0567,  0.0619,  0.0048]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0082, -0.0625, -0.0177],\n",
       "                        [-0.0312,  0.0559, -0.0651],\n",
       "                        [-0.0222,  0.0927, -0.0781]],\n",
       "              \n",
       "                       [[-0.0816,  0.0762,  0.1000],\n",
       "                        [-0.0685, -0.0013,  0.0301],\n",
       "                        [ 0.0235, -0.0128,  0.0726]],\n",
       "              \n",
       "                       [[-0.1002,  0.0976,  0.0986],\n",
       "                        [ 0.0262, -0.0978, -0.0735],\n",
       "                        [-0.0254,  0.0028, -0.0030]]],\n",
       "              \n",
       "              \n",
       "                      [[[-0.0197,  0.0944, -0.0633],\n",
       "                        [ 0.0708,  0.0492,  0.0537],\n",
       "                        [ 0.0278, -0.0487, -0.0095]],\n",
       "              \n",
       "                       [[-0.0350,  0.0419, -0.0561],\n",
       "                        [ 0.0634, -0.0166,  0.0835],\n",
       "                        [ 0.0921,  0.0958, -0.0597]],\n",
       "              \n",
       "                       [[ 0.0217, -0.0900, -0.0677],\n",
       "                        [ 0.0528, -0.0681, -0.0626],\n",
       "                        [ 0.0041,  0.0943,  0.0488]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0336,  0.0299, -0.0822],\n",
       "                        [-0.0997,  0.0909, -0.0685],\n",
       "                        [-0.0022, -0.0112,  0.1016]],\n",
       "              \n",
       "                       [[-0.0352,  0.0843,  0.0453],\n",
       "                        [ 0.0590, -0.0098, -0.0892],\n",
       "                        [ 0.0483, -0.0508, -0.0656]],\n",
       "              \n",
       "                       [[ 0.0782, -0.0009, -0.0740],\n",
       "                        [ 0.0101,  0.0258,  0.0727],\n",
       "                        [-0.0743, -0.0201, -0.0888]]],\n",
       "              \n",
       "              \n",
       "                      ...,\n",
       "              \n",
       "              \n",
       "                      [[[-0.0846, -0.0780, -0.0526],\n",
       "                        [-0.0943,  0.0213, -0.0838],\n",
       "                        [ 0.0306, -0.0004,  0.0809]],\n",
       "              \n",
       "                       [[-0.0960, -0.0889,  0.0104],\n",
       "                        [-0.0522, -0.0971, -0.0784],\n",
       "                        [ 0.0676, -0.0012, -0.0097]],\n",
       "              \n",
       "                       [[-0.0711,  0.0558, -0.0049],\n",
       "                        [-0.0882,  0.0157, -0.0154],\n",
       "                        [-0.1020,  0.0353, -0.0029]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0453,  0.0876, -0.0504],\n",
       "                        [ 0.0844,  0.0552, -0.0364],\n",
       "                        [ 0.0718,  0.0614, -0.0390]],\n",
       "              \n",
       "                       [[ 0.0135, -0.0868,  0.0772],\n",
       "                        [ 0.0122,  0.0070,  0.0300],\n",
       "                        [-0.0366, -0.0128, -0.0596]],\n",
       "              \n",
       "                       [[-0.0721, -0.0899,  0.0042],\n",
       "                        [-0.0856,  0.0377,  0.0498],\n",
       "                        [ 0.0525, -0.0217, -0.0715]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0835, -0.0996,  0.0537],\n",
       "                        [ 0.0839, -0.0266,  0.0991],\n",
       "                        [ 0.0552, -0.0204, -0.0913]],\n",
       "              \n",
       "                       [[-0.0778, -0.0602, -0.0754],\n",
       "                        [-0.0311,  0.0634,  0.0053],\n",
       "                        [ 0.0299,  0.0904, -0.0158]],\n",
       "              \n",
       "                       [[-0.0594, -0.0545, -0.0120],\n",
       "                        [-0.0485,  0.0626,  0.0327],\n",
       "                        [ 0.0273,  0.0926, -0.0191]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0438, -0.0642,  0.0948],\n",
       "                        [-0.0805,  0.0074, -0.0364],\n",
       "                        [-0.0209, -0.0882, -0.0256]],\n",
       "              \n",
       "                       [[-0.0862,  0.0674,  0.0797],\n",
       "                        [ 0.0700, -0.0292,  0.0934],\n",
       "                        [ 0.0918, -0.0031, -0.0528]],\n",
       "              \n",
       "                       [[-0.0745, -0.0540,  0.0217],\n",
       "                        [-0.0247,  0.0781, -0.0377],\n",
       "                        [-0.0133,  0.0644,  0.0927]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0745, -0.0755, -0.0253],\n",
       "                        [-0.0629,  0.0392, -0.0806],\n",
       "                        [ 0.0818, -0.0553, -0.0622]],\n",
       "              \n",
       "                       [[ 0.0317,  0.0669,  0.0269],\n",
       "                        [ 0.0164,  0.0219,  0.0239],\n",
       "                        [-0.0209,  0.0338,  0.0002]],\n",
       "              \n",
       "                       [[-0.0366, -0.0196, -0.0986],\n",
       "                        [-0.0239, -0.0351, -0.0299],\n",
       "                        [ 0.0516,  0.0110, -0.0093]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0159,  0.0941, -0.0317],\n",
       "                        [-0.0285, -0.0312,  0.0721],\n",
       "                        [-0.0395, -0.0080, -0.0920]],\n",
       "              \n",
       "                       [[-0.0999,  0.0618,  0.0864],\n",
       "                        [-0.0418, -0.0468,  0.0559],\n",
       "                        [ 0.0074,  0.0656,  0.0291]],\n",
       "              \n",
       "                       [[ 0.0913, -0.0643, -0.0201],\n",
       "                        [-0.0180,  0.0222, -0.0178],\n",
       "                        [-0.0198,  0.0454, -0.0530]]]])),\n",
       "             ('conv2.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('conv3.weight',\n",
       "              tensor([[[[-1.9851e-02,  6.8706e-02,  6.0227e-02],\n",
       "                        [-2.8886e-02,  5.4061e-02, -4.4401e-02],\n",
       "                        [ 6.9847e-02, -2.2532e-02, -5.2110e-02]],\n",
       "              \n",
       "                       [[ 5.4893e-02, -6.9748e-02, -3.0140e-02],\n",
       "                        [ 6.1495e-02, -1.1097e-02, -7.9872e-03],\n",
       "                        [ 4.1147e-02, -3.7999e-02, -4.1880e-03]],\n",
       "              \n",
       "                       [[ 6.8600e-02, -1.5743e-02,  3.0868e-03],\n",
       "                        [-4.0270e-02,  1.2104e-02, -2.2401e-02],\n",
       "                        [ 7.9095e-02,  2.6012e-02, -2.3574e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-7.5689e-02, -4.9824e-02, -4.5312e-02],\n",
       "                        [ 1.4828e-02, -8.2691e-02,  8.6027e-03],\n",
       "                        [-5.2063e-02, -7.1708e-02,  3.0583e-03]],\n",
       "              \n",
       "                       [[ 1.3465e-02,  6.7482e-02,  7.9643e-02],\n",
       "                        [-5.4525e-02, -4.3668e-02, -5.9208e-02],\n",
       "                        [ 6.5435e-02, -2.7130e-02, -3.6660e-02]],\n",
       "              \n",
       "                       [[ 4.3057e-02,  4.0071e-02,  8.2271e-02],\n",
       "                        [-1.4339e-03, -7.2655e-04,  2.8989e-02],\n",
       "                        [-5.5304e-03,  6.1046e-02, -4.1395e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-4.3909e-02,  3.9249e-02,  2.2808e-02],\n",
       "                        [-5.3013e-03,  1.5520e-02,  3.1472e-02],\n",
       "                        [ 1.4996e-02,  3.9696e-02,  6.1809e-02]],\n",
       "              \n",
       "                       [[ 5.3840e-02, -4.8794e-02, -7.1332e-02],\n",
       "                        [-5.4076e-02,  3.3228e-02, -5.4810e-02],\n",
       "                        [ 6.0435e-02,  5.1962e-02,  2.2343e-02]],\n",
       "              \n",
       "                       [[ 2.8096e-02,  3.4415e-02,  6.7001e-03],\n",
       "                        [ 1.6874e-02,  1.3438e-02, -4.0655e-02],\n",
       "                        [ 6.0668e-02,  9.5012e-03, -1.5992e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-3.4833e-02, -6.2625e-02,  6.9780e-02],\n",
       "                        [-7.0863e-02,  7.1346e-02, -4.5675e-03],\n",
       "                        [-4.6231e-02, -4.7022e-02,  6.6728e-03]],\n",
       "              \n",
       "                       [[-3.1847e-02, -4.0871e-02,  4.3529e-02],\n",
       "                        [ 2.7212e-02, -2.4035e-02, -6.3609e-03],\n",
       "                        [ 3.6390e-03, -4.4464e-02,  7.1168e-02]],\n",
       "              \n",
       "                       [[ 1.2102e-02, -6.3839e-02, -5.5689e-04],\n",
       "                        [ 3.7081e-02, -1.5751e-02,  5.3161e-02],\n",
       "                        [ 8.2611e-02,  7.1053e-02,  4.7658e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 5.9156e-02, -3.6908e-02, -3.9688e-02],\n",
       "                        [-1.0987e-02, -4.5106e-02,  7.8018e-02],\n",
       "                        [-1.6946e-02, -6.4305e-02,  5.6938e-02]],\n",
       "              \n",
       "                       [[-2.0229e-02,  9.1811e-03, -6.9401e-02],\n",
       "                        [ 5.6217e-03, -6.9234e-02, -3.7894e-02],\n",
       "                        [ 3.6090e-02, -2.7466e-03, -2.9260e-02]],\n",
       "              \n",
       "                       [[-8.0437e-03, -7.0111e-02, -7.2408e-02],\n",
       "                        [ 7.5715e-02, -3.8937e-02, -6.4347e-02],\n",
       "                        [ 2.3012e-02,  2.5667e-02, -5.7225e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-4.8982e-02, -7.9944e-02,  2.4162e-02],\n",
       "                        [ 3.2924e-02,  2.3475e-02, -3.0310e-02],\n",
       "                        [ 1.7288e-02,  3.6779e-02, -2.0361e-02]],\n",
       "              \n",
       "                       [[ 7.8452e-02,  3.8795e-02, -6.5357e-03],\n",
       "                        [ 5.4519e-02,  5.3209e-02, -5.7375e-02],\n",
       "                        [ 4.8345e-02, -7.2299e-02, -6.7927e-02]],\n",
       "              \n",
       "                       [[-2.1995e-02, -4.4262e-02, -9.4290e-03],\n",
       "                        [-4.0127e-02,  1.9062e-02,  1.7068e-02],\n",
       "                        [ 3.9768e-02, -5.1814e-02, -4.7621e-02]]],\n",
       "              \n",
       "              \n",
       "                      ...,\n",
       "              \n",
       "              \n",
       "                      [[[ 6.3498e-02,  4.3399e-02, -9.5951e-03],\n",
       "                        [-8.3102e-02,  4.7347e-02, -2.9320e-03],\n",
       "                        [ 1.2994e-02, -2.0626e-02,  5.4239e-02]],\n",
       "              \n",
       "                       [[-3.1865e-02,  3.6303e-02, -3.3373e-02],\n",
       "                        [ 2.6514e-02,  1.7071e-02,  1.5476e-03],\n",
       "                        [-5.4826e-02, -3.5913e-02,  4.6511e-02]],\n",
       "              \n",
       "                       [[-2.3936e-02, -8.0129e-02,  1.5631e-02],\n",
       "                        [-6.3423e-02, -5.7514e-02, -3.6030e-02],\n",
       "                        [-7.1799e-02, -2.2145e-02, -4.8694e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 7.3356e-03,  2.7350e-02,  4.5848e-02],\n",
       "                        [ 5.8106e-02, -1.9850e-02,  9.0987e-03],\n",
       "                        [-3.4676e-02,  6.5306e-02, -8.2328e-02]],\n",
       "              \n",
       "                       [[-7.8075e-02, -2.1230e-02,  8.5628e-03],\n",
       "                        [ 8.2367e-02,  4.6448e-02, -2.5571e-02],\n",
       "                        [-7.3937e-02, -4.1733e-02,  6.1092e-02]],\n",
       "              \n",
       "                       [[-6.9757e-02, -9.8060e-03, -3.4054e-02],\n",
       "                        [ 3.2744e-03, -7.2299e-03, -3.1619e-02],\n",
       "                        [-1.7881e-02,  5.3073e-02,  3.7830e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 3.5056e-02, -7.9198e-02, -3.3788e-05],\n",
       "                        [-2.5901e-02, -6.4699e-02, -2.4080e-02],\n",
       "                        [ 2.8438e-02,  6.9827e-02,  2.8279e-02]],\n",
       "              \n",
       "                       [[ 7.4407e-02, -5.4549e-02, -5.7933e-02],\n",
       "                        [-6.9820e-03,  1.4827e-02,  7.2922e-02],\n",
       "                        [-3.4602e-02,  7.3227e-02, -9.5381e-03]],\n",
       "              \n",
       "                       [[ 7.6201e-02, -3.4808e-02, -5.4734e-02],\n",
       "                        [-3.7056e-03, -6.1601e-02,  7.5757e-02],\n",
       "                        [ 8.0515e-02, -2.3001e-02, -6.7457e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 2.9813e-02, -2.5784e-02, -7.0635e-02],\n",
       "                        [ 6.9735e-02, -3.9607e-02, -6.9189e-02],\n",
       "                        [-4.6477e-02, -1.8222e-02,  2.1825e-02]],\n",
       "              \n",
       "                       [[-3.3839e-02,  4.8052e-02, -3.7994e-02],\n",
       "                        [ 2.8082e-02,  8.1144e-02, -7.9839e-02],\n",
       "                        [-1.7756e-02,  5.7842e-02, -3.1677e-02]],\n",
       "              \n",
       "                       [[ 1.8307e-02, -5.4222e-02,  4.9310e-02],\n",
       "                        [-7.6830e-02,  1.8299e-03, -3.5730e-02],\n",
       "                        [ 6.5258e-02,  1.7439e-02,  2.4171e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 5.6390e-02, -4.0051e-02,  6.7264e-02],\n",
       "                        [-7.0830e-02, -3.1997e-02,  2.9081e-03],\n",
       "                        [ 6.3139e-02,  6.7227e-02, -2.2146e-02]],\n",
       "              \n",
       "                       [[-7.5571e-02,  2.6460e-02,  6.8301e-02],\n",
       "                        [ 4.9539e-03,  7.4384e-02, -2.5274e-02],\n",
       "                        [ 9.4988e-03,  8.3197e-03, -8.1539e-03]],\n",
       "              \n",
       "                       [[ 5.2507e-02, -4.1803e-02, -7.1285e-02],\n",
       "                        [-5.5016e-02,  4.2059e-02,  1.1960e-02],\n",
       "                        [-2.2519e-02, -3.6240e-02,  3.6083e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 1.1320e-02, -1.8094e-02,  6.6551e-02],\n",
       "                        [-1.3671e-02,  3.7858e-02,  1.3799e-02],\n",
       "                        [-9.5710e-03, -5.8060e-03, -7.7772e-03]],\n",
       "              \n",
       "                       [[-1.8302e-02, -3.0078e-02,  5.6104e-02],\n",
       "                        [ 4.5238e-03,  4.0042e-02,  6.5036e-02],\n",
       "                        [ 5.6642e-02, -6.9944e-02,  8.1579e-02]],\n",
       "              \n",
       "                       [[-6.2835e-02, -6.7294e-02, -4.1498e-02],\n",
       "                        [-6.0578e-02,  7.9192e-02, -8.0457e-02],\n",
       "                        [-7.9520e-02,  3.3830e-02,  5.9663e-02]]]])),\n",
       "             ('conv3.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('conv4.weight',\n",
       "              tensor([[[[ 6.0364e-02,  6.5638e-02,  3.4439e-03],\n",
       "                        [-4.0215e-02,  2.9556e-02, -5.5694e-02],\n",
       "                        [ 3.6350e-02,  4.5027e-02,  5.1116e-02]],\n",
       "              \n",
       "                       [[-1.0052e-02,  6.3601e-02,  1.3369e-02],\n",
       "                        [-5.9767e-03, -3.3412e-03, -2.9950e-02],\n",
       "                        [-8.1404e-03, -5.8009e-02,  6.3932e-04]],\n",
       "              \n",
       "                       [[-3.7493e-02,  3.9701e-02,  2.4004e-02],\n",
       "                        [-3.5960e-02, -1.0294e-02, -8.8385e-03],\n",
       "                        [-4.6559e-03, -4.0604e-02, -1.5537e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 1.9537e-02,  6.6122e-02, -5.8558e-02],\n",
       "                        [-1.1357e-03, -2.1838e-02, -1.2300e-02],\n",
       "                        [ 1.2824e-02,  4.1182e-02, -8.3348e-03]],\n",
       "              \n",
       "                       [[-4.0990e-02, -4.2591e-02, -5.9246e-02],\n",
       "                        [ 4.5461e-03,  2.4217e-02, -6.7774e-02],\n",
       "                        [ 6.8548e-02, -4.0636e-02, -3.8765e-02]],\n",
       "              \n",
       "                       [[-1.0902e-02, -2.5067e-02,  6.9865e-02],\n",
       "                        [ 7.0486e-02, -9.7224e-03, -4.6745e-02],\n",
       "                        [-4.2126e-02,  4.4875e-02,  1.2676e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-2.9526e-02,  2.8723e-03, -2.0403e-02],\n",
       "                        [ 6.3943e-02, -3.2324e-02,  4.2855e-02],\n",
       "                        [-3.4436e-02,  6.2185e-02,  2.8651e-02]],\n",
       "              \n",
       "                       [[ 4.9391e-02,  6.5921e-02, -7.1191e-02],\n",
       "                        [ 6.4490e-02,  9.7884e-03,  4.5657e-02],\n",
       "                        [-5.8020e-02,  4.3222e-02, -4.1385e-02]],\n",
       "              \n",
       "                       [[ 8.5334e-03, -4.6778e-02,  9.4733e-03],\n",
       "                        [ 1.4456e-02,  8.3533e-03,  2.5592e-02],\n",
       "                        [ 1.7775e-03,  1.9506e-02, -3.2889e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 4.8596e-02,  5.7061e-02,  5.1332e-02],\n",
       "                        [ 2.6395e-02, -4.4912e-02, -7.1648e-02],\n",
       "                        [-2.9929e-02,  4.4583e-02,  4.2918e-02]],\n",
       "              \n",
       "                       [[-3.9596e-02,  1.8967e-02,  6.1032e-02],\n",
       "                        [-5.2699e-02, -5.1257e-02, -4.6832e-02],\n",
       "                        [ 1.1412e-02,  4.4881e-02, -6.7276e-02]],\n",
       "              \n",
       "                       [[-2.4113e-02,  2.3988e-02, -2.7391e-02],\n",
       "                        [-3.3553e-02,  4.7551e-02, -4.3562e-02],\n",
       "                        [ 3.5854e-02,  2.3326e-02, -5.0473e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-3.0607e-02,  4.1719e-02,  1.6141e-02],\n",
       "                        [ 6.9484e-02,  1.3795e-02, -6.8838e-02],\n",
       "                        [-3.8969e-02,  3.5993e-02, -4.5707e-02]],\n",
       "              \n",
       "                       [[ 6.7988e-02,  6.9394e-02, -6.5540e-02],\n",
       "                        [-4.3081e-02, -3.2918e-02,  5.1580e-02],\n",
       "                        [ 8.4563e-03, -4.1032e-02, -3.9616e-02]],\n",
       "              \n",
       "                       [[-7.7494e-03,  1.9532e-03, -7.7575e-04],\n",
       "                        [ 1.2987e-02, -3.8269e-02,  2.7737e-02],\n",
       "                        [ 4.0266e-02,  4.4939e-02,  6.2125e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-1.5164e-02, -6.9292e-02,  6.7685e-02],\n",
       "                        [-2.5364e-02, -6.6686e-02, -4.3595e-02],\n",
       "                        [ 3.8219e-02,  1.7499e-02, -3.6972e-02]],\n",
       "              \n",
       "                       [[ 7.1598e-02,  2.5923e-02,  2.8051e-03],\n",
       "                        [ 2.3252e-02, -6.4099e-02, -2.0583e-02],\n",
       "                        [-5.0575e-02,  6.9757e-02, -4.4123e-02]],\n",
       "              \n",
       "                       [[ 7.2074e-02, -4.4794e-02,  2.4768e-02],\n",
       "                        [-5.9435e-02,  5.1812e-02, -6.0488e-02],\n",
       "                        [ 2.8945e-02,  1.2024e-02, -6.3668e-02]]],\n",
       "              \n",
       "              \n",
       "                      ...,\n",
       "              \n",
       "              \n",
       "                      [[[ 6.1102e-02, -5.4984e-02,  8.8535e-03],\n",
       "                        [-2.7102e-02,  4.3304e-03, -1.4120e-02],\n",
       "                        [ 6.5440e-03,  5.3928e-04,  5.0465e-02]],\n",
       "              \n",
       "                       [[-2.7098e-02, -3.2392e-02,  4.6614e-02],\n",
       "                        [ 4.9596e-02, -2.1259e-02, -1.7654e-02],\n",
       "                        [-5.3839e-02, -1.3289e-02,  5.9496e-02]],\n",
       "              \n",
       "                       [[-6.9468e-02, -5.5287e-02,  3.4909e-02],\n",
       "                        [ 2.8992e-02,  8.0701e-03, -4.5262e-02],\n",
       "                        [-3.7760e-02,  4.7170e-03, -3.6214e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-4.0723e-02, -3.2259e-02,  4.9648e-02],\n",
       "                        [-4.1466e-02,  7.9030e-03, -5.3387e-02],\n",
       "                        [ 6.5075e-02, -2.7688e-03,  2.5199e-02]],\n",
       "              \n",
       "                       [[ 2.6234e-02,  8.0576e-03,  2.2481e-02],\n",
       "                        [-6.9613e-02, -5.8365e-02,  4.8053e-02],\n",
       "                        [-3.5706e-02, -5.8022e-02,  1.6241e-02]],\n",
       "              \n",
       "                       [[-3.8089e-02, -6.5865e-02, -6.1549e-02],\n",
       "                        [-5.9706e-02, -6.2015e-02,  2.7744e-02],\n",
       "                        [-5.2536e-02, -1.6755e-02,  2.9272e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 5.5725e-02, -4.1084e-02, -1.1808e-02],\n",
       "                        [ 3.5369e-02,  6.4254e-02,  7.0072e-02],\n",
       "                        [-3.1894e-02,  3.2044e-03, -3.8709e-02]],\n",
       "              \n",
       "                       [[ 5.6489e-02, -6.8949e-02,  2.2555e-02],\n",
       "                        [-6.5922e-02,  7.8744e-03,  6.7006e-02],\n",
       "                        [ 6.7653e-02, -3.6703e-02,  5.2044e-02]],\n",
       "              \n",
       "                       [[-6.2278e-02,  4.3995e-02, -3.4628e-03],\n",
       "                        [-6.3853e-02, -5.5807e-02,  3.9756e-02],\n",
       "                        [ 1.6487e-02, -2.2544e-02, -9.1653e-03]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-4.6358e-02,  4.4385e-02,  5.5733e-02],\n",
       "                        [ 4.5244e-03, -2.9369e-02,  2.3151e-02],\n",
       "                        [ 5.6130e-02,  1.6102e-02,  1.6607e-02]],\n",
       "              \n",
       "                       [[ 5.8294e-04, -6.9467e-02, -1.1689e-02],\n",
       "                        [ 6.4227e-02, -6.4280e-02, -5.4178e-02],\n",
       "                        [-6.2281e-02,  3.4453e-03, -5.4926e-04]],\n",
       "              \n",
       "                       [[ 5.5726e-02, -2.8617e-02,  1.7242e-02],\n",
       "                        [ 6.8432e-02,  6.6183e-02, -6.0127e-02],\n",
       "                        [ 7.1249e-02, -1.1319e-02, -9.5385e-04]]],\n",
       "              \n",
       "              \n",
       "                      [[[-4.2551e-02, -3.4790e-02,  6.0273e-02],\n",
       "                        [-5.5952e-02,  1.8338e-02, -5.2642e-02],\n",
       "                        [-2.8594e-02, -1.0402e-03, -5.0046e-02]],\n",
       "              \n",
       "                       [[ 1.5991e-02,  2.2573e-02, -4.3869e-02],\n",
       "                        [-2.9065e-02, -6.6742e-02,  6.2943e-02],\n",
       "                        [ 4.9271e-03,  6.3816e-02, -2.2058e-03]],\n",
       "              \n",
       "                       [[ 9.4659e-03, -3.5035e-02, -1.0136e-02],\n",
       "                        [-6.5730e-03, -4.9389e-02, -4.1088e-02],\n",
       "                        [-5.9219e-02,  1.9979e-02,  1.2794e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-1.4196e-02,  5.6988e-02, -2.5414e-02],\n",
       "                        [-1.8886e-03,  4.6702e-02,  5.5521e-02],\n",
       "                        [-5.7718e-02,  1.8885e-02, -3.3410e-02]],\n",
       "              \n",
       "                       [[ 7.7696e-03, -1.1713e-02, -2.5579e-02],\n",
       "                        [ 6.3032e-05, -5.0387e-02, -5.0513e-02],\n",
       "                        [ 4.9991e-02,  2.4515e-02, -3.0655e-02]],\n",
       "              \n",
       "                       [[-2.2548e-02,  2.9073e-02,  5.6824e-02],\n",
       "                        [ 7.5086e-03,  4.9806e-02, -2.0928e-02],\n",
       "                        [-5.2521e-02,  6.9637e-02,  2.6935e-02]]]])),\n",
       "             ('conv4.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('conv5.weight',\n",
       "              tensor([[[[-2.1213e-02, -4.0364e-02,  4.4882e-02],\n",
       "                        [ 4.7575e-02, -2.6314e-02, -2.4949e-03],\n",
       "                        [ 5.6290e-02, -9.5551e-03,  1.7977e-02]],\n",
       "              \n",
       "                       [[-2.9077e-03, -5.0178e-02,  2.0568e-02],\n",
       "                        [-4.3429e-03, -8.6891e-03,  3.5939e-02],\n",
       "                        [ 2.5996e-02,  5.5568e-02, -4.6230e-02]],\n",
       "              \n",
       "                       [[-1.0237e-02,  5.6009e-03,  4.7134e-02],\n",
       "                        [ 2.6562e-03, -1.5727e-02,  1.7607e-02],\n",
       "                        [ 9.3821e-03, -3.6197e-02,  1.8333e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 2.2667e-02,  1.8400e-02, -4.6190e-02],\n",
       "                        [ 3.9930e-02, -3.8400e-02,  2.8238e-02],\n",
       "                        [ 4.3745e-02,  3.1889e-04,  2.6219e-04]],\n",
       "              \n",
       "                       [[-1.2640e-02,  1.5186e-02,  2.4183e-02],\n",
       "                        [-1.8940e-02,  5.0477e-02,  3.1678e-02],\n",
       "                        [ 3.1497e-03, -2.0235e-02, -3.9058e-02]],\n",
       "              \n",
       "                       [[-5.7074e-02, -3.9389e-02,  3.2147e-02],\n",
       "                        [-3.9334e-02,  4.0440e-02,  3.5771e-02],\n",
       "                        [ 4.6073e-02, -4.8340e-03, -5.7799e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-1.0838e-02,  1.2690e-02,  4.3689e-02],\n",
       "                        [ 4.0704e-02,  5.7458e-02, -4.6164e-02],\n",
       "                        [-5.5405e-02,  5.0851e-03, -1.8734e-02]],\n",
       "              \n",
       "                       [[-4.4801e-02,  1.3727e-02, -3.8799e-03],\n",
       "                        [ 3.3087e-02, -5.8590e-02, -3.3789e-02],\n",
       "                        [-2.2287e-02, -4.9497e-02, -3.6455e-02]],\n",
       "              \n",
       "                       [[-1.6984e-02, -2.2494e-02, -5.0430e-02],\n",
       "                        [ 5.3085e-02,  5.5452e-03, -1.5907e-03],\n",
       "                        [ 4.4534e-02, -1.9862e-02, -3.6761e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 2.6201e-02, -1.4022e-02,  3.1834e-02],\n",
       "                        [ 4.1563e-02,  5.2973e-03,  4.6166e-02],\n",
       "                        [-9.3210e-03, -3.3629e-02,  3.6211e-02]],\n",
       "              \n",
       "                       [[ 5.9363e-03,  4.9201e-02,  1.3074e-02],\n",
       "                        [ 4.6736e-02, -2.7526e-02,  2.0255e-02],\n",
       "                        [ 2.9440e-02,  3.3356e-02,  1.4453e-02]],\n",
       "              \n",
       "                       [[-1.4180e-02, -2.6843e-03,  1.3575e-02],\n",
       "                        [ 6.8842e-03,  2.7892e-02, -1.6482e-02],\n",
       "                        [-4.7933e-02, -1.7107e-02, -2.1726e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-2.9584e-02, -3.7552e-02,  4.3228e-02],\n",
       "                        [-3.0138e-03,  4.6679e-02,  3.8625e-02],\n",
       "                        [ 2.1927e-02, -2.3545e-02, -5.3437e-02]],\n",
       "              \n",
       "                       [[ 5.0664e-02,  1.1268e-02,  5.2184e-02],\n",
       "                        [ 2.4791e-02, -3.7040e-02,  4.2071e-02],\n",
       "                        [-5.0545e-02, -2.9119e-02,  5.6889e-02]],\n",
       "              \n",
       "                       [[ 5.5920e-02,  1.5640e-02,  2.8918e-02],\n",
       "                        [-3.1818e-04,  2.1879e-02, -1.0076e-02],\n",
       "                        [-2.4005e-03,  5.4307e-02,  6.1669e-03]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-8.4988e-03, -2.4480e-02,  4.1453e-02],\n",
       "                        [-4.6192e-02, -4.4551e-02, -1.0662e-02],\n",
       "                        [-5.3443e-03, -2.5204e-02,  3.6266e-02]],\n",
       "              \n",
       "                       [[ 1.3286e-02,  2.0361e-02, -2.3929e-02],\n",
       "                        [ 2.3617e-02, -2.6469e-02,  5.6881e-02],\n",
       "                        [-3.7730e-02,  5.8596e-02,  3.2476e-02]],\n",
       "              \n",
       "                       [[-5.8549e-02, -2.7393e-02,  7.3609e-04],\n",
       "                        [-2.0772e-02, -1.5186e-02, -3.7154e-03],\n",
       "                        [ 9.9866e-03,  3.6182e-02, -5.9888e-03]]],\n",
       "              \n",
       "              \n",
       "                      ...,\n",
       "              \n",
       "              \n",
       "                      [[[-9.9436e-03,  3.4023e-03,  3.6074e-02],\n",
       "                        [ 4.2181e-02,  5.0747e-02,  1.3258e-02],\n",
       "                        [-2.1909e-02,  4.2745e-02,  3.0278e-02]],\n",
       "              \n",
       "                       [[ 4.6750e-02, -1.2263e-02, -3.1435e-02],\n",
       "                        [ 4.6875e-03,  5.1601e-02,  4.0982e-02],\n",
       "                        [-2.8932e-02, -4.1023e-03,  4.3395e-02]],\n",
       "              \n",
       "                       [[-1.6947e-02, -1.8293e-02, -6.2377e-03],\n",
       "                        [ 2.4794e-03, -1.8926e-03,  2.2354e-02],\n",
       "                        [ 3.6552e-02, -4.0890e-02, -3.0116e-04]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 3.8129e-02,  9.1722e-03, -9.9023e-03],\n",
       "                        [-1.1673e-02, -4.2960e-03,  5.6186e-02],\n",
       "                        [-2.9957e-02, -3.9262e-04,  6.4737e-03]],\n",
       "              \n",
       "                       [[-2.9688e-02, -5.5057e-02, -5.3254e-02],\n",
       "                        [ 3.5726e-02, -3.4927e-02,  4.7021e-02],\n",
       "                        [ 1.4754e-02,  2.2053e-02, -5.4052e-02]],\n",
       "              \n",
       "                       [[-9.3663e-03, -7.6834e-05, -4.0525e-02],\n",
       "                        [-1.6921e-02, -1.7257e-03,  3.6423e-02],\n",
       "                        [ 2.0546e-02, -6.3369e-03, -1.4875e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 2.2443e-02, -5.5334e-02,  3.6820e-02],\n",
       "                        [-4.7570e-02, -2.4785e-03, -3.1017e-02],\n",
       "                        [ 3.0899e-03,  4.3438e-03,  4.0561e-02]],\n",
       "              \n",
       "                       [[-3.7678e-02,  2.4869e-02,  5.0083e-02],\n",
       "                        [-1.9188e-03, -2.2722e-02,  4.4875e-02],\n",
       "                        [ 4.4268e-03, -4.6879e-02,  1.1802e-02]],\n",
       "              \n",
       "                       [[ 2.8079e-02,  1.7862e-02, -5.4260e-02],\n",
       "                        [ 5.4290e-02,  3.1231e-03, -5.6911e-02],\n",
       "                        [ 3.3138e-02,  9.7103e-03, -5.5347e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 5.4730e-02,  4.0904e-02,  3.3045e-02],\n",
       "                        [-1.5002e-02, -3.8360e-02, -4.7177e-03],\n",
       "                        [-5.7192e-02,  1.8132e-03, -4.7901e-02]],\n",
       "              \n",
       "                       [[ 6.7808e-03,  5.3310e-03, -2.2622e-02],\n",
       "                        [-1.2139e-02,  7.0551e-03,  2.0486e-02],\n",
       "                        [-1.0295e-02, -2.0972e-02, -4.0748e-02]],\n",
       "              \n",
       "                       [[-8.4580e-04, -5.4325e-02, -3.9909e-02],\n",
       "                        [-1.2117e-02,  1.6423e-02,  5.1255e-02],\n",
       "                        [-8.8174e-03, -2.4629e-02,  4.4259e-02]]],\n",
       "              \n",
       "              \n",
       "                      [[[-2.7734e-02,  2.7951e-02, -9.9197e-03],\n",
       "                        [ 1.7097e-02, -5.4875e-03, -1.4301e-02],\n",
       "                        [ 2.4929e-02, -2.6879e-02,  5.6447e-02]],\n",
       "              \n",
       "                       [[ 1.4666e-02, -4.4004e-02,  9.2719e-04],\n",
       "                        [ 3.1008e-02, -3.8831e-02, -1.9957e-03],\n",
       "                        [ 5.6554e-02,  2.3542e-02, -4.1876e-02]],\n",
       "              \n",
       "                       [[ 2.4967e-02, -4.3959e-02, -2.2495e-02],\n",
       "                        [-3.2720e-02, -4.5027e-02, -2.8104e-02],\n",
       "                        [ 7.5845e-03,  3.0880e-02, -4.6337e-02]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-5.6443e-02, -4.9108e-02, -2.8315e-02],\n",
       "                        [-5.5730e-02,  1.4488e-02, -1.8482e-02],\n",
       "                        [ 2.0433e-02,  5.9295e-03,  4.1087e-02]],\n",
       "              \n",
       "                       [[ 5.0731e-02, -3.7320e-02, -2.8647e-02],\n",
       "                        [-5.3168e-02, -3.6032e-02, -2.3055e-02],\n",
       "                        [-4.4298e-02, -1.4856e-02, -4.8925e-02]],\n",
       "              \n",
       "                       [[ 1.9209e-02, -2.3164e-02,  7.7650e-03],\n",
       "                        [ 5.1600e-02,  4.6201e-02, -3.0780e-02],\n",
       "                        [ 4.1803e-02,  4.5820e-02, -3.9490e-02]]]])),\n",
       "             ('conv5.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('conv6.weight',\n",
       "              tensor([[[[-0.0259,  0.0473,  0.0098],\n",
       "                        [-0.0401, -0.0460, -0.0048],\n",
       "                        [ 0.0249,  0.0246,  0.0374]],\n",
       "              \n",
       "                       [[ 0.0191,  0.0150, -0.0046],\n",
       "                        [-0.0068, -0.0070, -0.0442],\n",
       "                        [ 0.0022, -0.0098,  0.0283]],\n",
       "              \n",
       "                       [[ 0.0183,  0.0196,  0.0248],\n",
       "                        [ 0.0474,  0.0452,  0.0427],\n",
       "                        [-0.0171, -0.0404,  0.0309]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0461,  0.0408,  0.0417],\n",
       "                        [ 0.0145,  0.0362, -0.0227],\n",
       "                        [-0.0331,  0.0382,  0.0018]],\n",
       "              \n",
       "                       [[-0.0042, -0.0316, -0.0348],\n",
       "                        [-0.0070, -0.0002,  0.0483],\n",
       "                        [-0.0189, -0.0451,  0.0141]],\n",
       "              \n",
       "                       [[ 0.0404,  0.0332, -0.0133],\n",
       "                        [-0.0509,  0.0071, -0.0160],\n",
       "                        [ 0.0105, -0.0260,  0.0323]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0432, -0.0451,  0.0373],\n",
       "                        [ 0.0012, -0.0226, -0.0433],\n",
       "                        [ 0.0270, -0.0482, -0.0285]],\n",
       "              \n",
       "                       [[ 0.0003,  0.0466, -0.0266],\n",
       "                        [-0.0317, -0.0321,  0.0483],\n",
       "                        [ 0.0197,  0.0389, -0.0301]],\n",
       "              \n",
       "                       [[ 0.0289,  0.0081,  0.0093],\n",
       "                        [-0.0102, -0.0363, -0.0184],\n",
       "                        [ 0.0324, -0.0395, -0.0191]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0106, -0.0316, -0.0277],\n",
       "                        [-0.0480,  0.0057, -0.0004],\n",
       "                        [ 0.0417, -0.0307,  0.0270]],\n",
       "              \n",
       "                       [[-0.0494,  0.0428, -0.0173],\n",
       "                        [ 0.0163, -0.0091, -0.0197],\n",
       "                        [ 0.0372,  0.0276, -0.0247]],\n",
       "              \n",
       "                       [[-0.0422,  0.0093, -0.0028],\n",
       "                        [ 0.0226, -0.0311,  0.0335],\n",
       "                        [ 0.0178, -0.0255,  0.0349]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0113,  0.0078,  0.0249],\n",
       "                        [ 0.0165,  0.0014, -0.0331],\n",
       "                        [-0.0083,  0.0179, -0.0018]],\n",
       "              \n",
       "                       [[-0.0146,  0.0365, -0.0238],\n",
       "                        [ 0.0038, -0.0203,  0.0470],\n",
       "                        [ 0.0385,  0.0406, -0.0287]],\n",
       "              \n",
       "                       [[ 0.0431,  0.0445, -0.0238],\n",
       "                        [ 0.0289, -0.0058,  0.0419],\n",
       "                        [-0.0190, -0.0419, -0.0134]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0011, -0.0182, -0.0064],\n",
       "                        [-0.0179,  0.0032,  0.0309],\n",
       "                        [-0.0310, -0.0485, -0.0145]],\n",
       "              \n",
       "                       [[-0.0296,  0.0304, -0.0012],\n",
       "                        [-0.0278, -0.0349,  0.0141],\n",
       "                        [-0.0010,  0.0442, -0.0085]],\n",
       "              \n",
       "                       [[-0.0440, -0.0172, -0.0401],\n",
       "                        [-0.0039,  0.0231,  0.0491],\n",
       "                        [-0.0198, -0.0239,  0.0030]]],\n",
       "              \n",
       "              \n",
       "                      ...,\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0308,  0.0012,  0.0032],\n",
       "                        [ 0.0342, -0.0470,  0.0475],\n",
       "                        [-0.0309, -0.0391,  0.0343]],\n",
       "              \n",
       "                       [[-0.0273, -0.0421,  0.0042],\n",
       "                        [-0.0263,  0.0140, -0.0382],\n",
       "                        [ 0.0206,  0.0260,  0.0474]],\n",
       "              \n",
       "                       [[-0.0430,  0.0413, -0.0501],\n",
       "                        [ 0.0433, -0.0116, -0.0002],\n",
       "                        [ 0.0445,  0.0276,  0.0335]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[-0.0499, -0.0017, -0.0297],\n",
       "                        [ 0.0266, -0.0138, -0.0456],\n",
       "                        [ 0.0192,  0.0437,  0.0378]],\n",
       "              \n",
       "                       [[ 0.0097,  0.0486,  0.0234],\n",
       "                        [ 0.0146,  0.0285, -0.0478],\n",
       "                        [-0.0331,  0.0370,  0.0218]],\n",
       "              \n",
       "                       [[-0.0211, -0.0492, -0.0445],\n",
       "                        [ 0.0414,  0.0204,  0.0211],\n",
       "                        [-0.0061, -0.0099,  0.0306]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0383, -0.0257, -0.0037],\n",
       "                        [-0.0317, -0.0469, -0.0117],\n",
       "                        [ 0.0035, -0.0334,  0.0227]],\n",
       "              \n",
       "                       [[ 0.0036,  0.0281,  0.0213],\n",
       "                        [ 0.0250,  0.0430, -0.0258],\n",
       "                        [ 0.0035,  0.0220,  0.0396]],\n",
       "              \n",
       "                       [[ 0.0406, -0.0385, -0.0102],\n",
       "                        [ 0.0166,  0.0476,  0.0095],\n",
       "                        [-0.0041,  0.0034,  0.0332]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0287,  0.0205, -0.0401],\n",
       "                        [-0.0165, -0.0037,  0.0249],\n",
       "                        [-0.0062, -0.0342, -0.0177]],\n",
       "              \n",
       "                       [[ 0.0011,  0.0352,  0.0013],\n",
       "                        [-0.0056, -0.0140, -0.0409],\n",
       "                        [ 0.0344, -0.0458, -0.0483]],\n",
       "              \n",
       "                       [[ 0.0311, -0.0025,  0.0134],\n",
       "                        [-0.0003,  0.0426,  0.0377],\n",
       "                        [ 0.0252, -0.0269,  0.0220]]],\n",
       "              \n",
       "              \n",
       "                      [[[ 0.0265,  0.0270,  0.0189],\n",
       "                        [ 0.0357,  0.0466,  0.0050],\n",
       "                        [-0.0228,  0.0487, -0.0349]],\n",
       "              \n",
       "                       [[-0.0128, -0.0508,  0.0380],\n",
       "                        [-0.0226, -0.0341, -0.0395],\n",
       "                        [-0.0322,  0.0305,  0.0070]],\n",
       "              \n",
       "                       [[-0.0162,  0.0365,  0.0452],\n",
       "                        [-0.0372, -0.0322, -0.0027],\n",
       "                        [-0.0450,  0.0433, -0.0163]],\n",
       "              \n",
       "                       ...,\n",
       "              \n",
       "                       [[ 0.0322,  0.0142, -0.0264],\n",
       "                        [ 0.0292,  0.0005,  0.0017],\n",
       "                        [-0.0109,  0.0021,  0.0349]],\n",
       "              \n",
       "                       [[ 0.0148, -0.0442,  0.0175],\n",
       "                        [ 0.0026, -0.0154,  0.0475],\n",
       "                        [-0.0122, -0.0222, -0.0454]],\n",
       "              \n",
       "                       [[ 0.0277,  0.0503,  0.0043],\n",
       "                        [-0.0402,  0.0144, -0.0197],\n",
       "                        [ 0.0100,  0.0033, -0.0375]]]])),\n",
       "             ('conv6.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('fc1.weight',\n",
       "              tensor([[ 0.0476,  0.0340, -0.0597,  ...,  0.0510,  0.0286, -0.0176],\n",
       "                      [ 0.0170,  0.0402,  0.0471,  ..., -0.0005,  0.0500, -0.0172],\n",
       "                      [ 0.0337, -0.0119,  0.0284,  ..., -0.0418,  0.0042, -0.0150],\n",
       "                      ...,\n",
       "                      [ 0.0018,  0.0520,  0.0407,  ...,  0.0590,  0.0523, -0.0300],\n",
       "                      [-0.0104, -0.0490,  0.0106,  ...,  0.0371, -0.0119, -0.0394],\n",
       "                      [-0.0479,  0.0284,  0.0437,  ..., -0.0497, -0.0039, -0.0600]])),\n",
       "             ('fc1.bias',\n",
       "              tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "                      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])),\n",
       "             ('fc2.weight',\n",
       "              tensor([[-0.1246,  0.1421, -0.0975,  ...,  0.0698,  0.1072, -0.0590],\n",
       "                      [-0.1232, -0.0539, -0.0915,  ...,  0.0606,  0.0907, -0.1369],\n",
       "                      [ 0.1460, -0.1195, -0.1395,  ..., -0.0834,  0.1112, -0.0744],\n",
       "                      ...,\n",
       "                      [-0.1482,  0.1037, -0.1145,  ...,  0.0057, -0.0247,  0.1139],\n",
       "                      [ 0.1044, -0.1099,  0.0539,  ...,  0.0600, -0.0537, -0.1131],\n",
       "                      [ 0.1472,  0.1254,  0.0062,  ...,  0.0654, -0.0105,  0.1343]])),\n",
       "             ('fc2.bias', tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]))])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.state_dict()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 设置交叉熵损失函数，SGD优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:40.023837Z",
     "start_time": "2025-06-26T01:43:40.019952Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "损失函数: CrossEntropyLoss()\n"
     ]
    }
   ],
   "source": [
    "model = NeuralNetwork()\n",
    "# 定义损失函数和优化器\n",
    "loss_fn = nn.CrossEntropyLoss()  # 交叉熵损失函数，适用于多分类问题，里边会做softmax，还有会把0-9标签转换成one-hot编码\n",
    "\n",
    "print(\"损失函数:\", loss_fn)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:43:40.035848Z",
     "start_time": "2025-06-26T01:43:40.032419Z"
    }
   },
   "outputs": [],
   "source": [
    "model = NeuralNetwork()\n",
    "\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)  # SGD优化器，学习率为0.01，动量为0.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.732814Z",
     "start_time": "2025-06-26T01:43:40.035848Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用设备: cpu\n",
      "训练开始，共43000步\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8adb8b86b21a416e9cf2d0ae09f966f6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/43000 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率(如果是回归，这里是损失): 91.1600\n",
      "早停: 在16500 步\n"
     ]
    }
   ],
   "source": [
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "print(f\"使用设备: {device}\")\n",
    "model = model.to(device) #将模型移动到GPU\n",
    "early_stopping=EarlyStopping(patience=5, delta=0.001)\n",
    "model_saver=ModelSaver(save_dir='model_weights', save_best_only=True)\n",
    "\n",
    "\n",
    "model, history = train_classification_model(model, train_loader, val_loader, loss_fn, optimizer, device, num_epochs=50, early_stopping=early_stopping, model_saver=model_saver, tensorboard_logger=None)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.737721Z",
     "start_time": "2025-06-26T01:45:37.732814Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'loss': 0.219854936003685, 'acc': 89.0625, 'step': 16401},\n",
       " {'loss': 0.19552703201770782, 'acc': 90.625, 'step': 16402},\n",
       " {'loss': 0.21835030615329742, 'acc': 92.1875, 'step': 16403},\n",
       " {'loss': 0.12136434763669968, 'acc': 95.3125, 'step': 16404},\n",
       " {'loss': 0.1387431025505066, 'acc': 93.75, 'step': 16405},\n",
       " {'loss': 0.12249128520488739, 'acc': 96.875, 'step': 16406},\n",
       " {'loss': 0.15974539518356323, 'acc': 90.625, 'step': 16407},\n",
       " {'loss': 0.19877085089683533, 'acc': 87.5, 'step': 16408},\n",
       " {'loss': 0.11381790041923523, 'acc': 93.75, 'step': 16409},\n",
       " {'loss': 0.16700996458530426, 'acc': 92.1875, 'step': 16410},\n",
       " {'loss': 0.20582999289035797, 'acc': 93.75, 'step': 16411},\n",
       " {'loss': 0.09489588439464569, 'acc': 96.875, 'step': 16412},\n",
       " {'loss': 0.23284943401813507, 'acc': 90.625, 'step': 16413},\n",
       " {'loss': 0.3116978704929352, 'acc': 92.1875, 'step': 16414},\n",
       " {'loss': 0.1966709941625595, 'acc': 93.75, 'step': 16415},\n",
       " {'loss': 0.0817507654428482, 'acc': 98.4375, 'step': 16416},\n",
       " {'loss': 0.2909381687641144, 'acc': 92.1875, 'step': 16417},\n",
       " {'loss': 0.07474711537361145, 'acc': 96.875, 'step': 16418},\n",
       " {'loss': 0.1001458540558815, 'acc': 96.875, 'step': 16419},\n",
       " {'loss': 0.33971768617630005, 'acc': 89.0625, 'step': 16420},\n",
       " {'loss': 0.1310729682445526, 'acc': 95.3125, 'step': 16421},\n",
       " {'loss': 0.2806280255317688, 'acc': 89.0625, 'step': 16422},\n",
       " {'loss': 0.09844891726970673, 'acc': 96.875, 'step': 16423},\n",
       " {'loss': 0.3438473641872406, 'acc': 89.0625, 'step': 16424},\n",
       " {'loss': 0.1021747961640358, 'acc': 95.3125, 'step': 16425},\n",
       " {'loss': 0.096786268055439, 'acc': 96.875, 'step': 16426},\n",
       " {'loss': 0.13284224271774292, 'acc': 93.75, 'step': 16427},\n",
       " {'loss': 0.13659706711769104, 'acc': 95.3125, 'step': 16428},\n",
       " {'loss': 0.10663942992687225, 'acc': 96.875, 'step': 16429},\n",
       " {'loss': 0.20846445858478546, 'acc': 90.625, 'step': 16430},\n",
       " {'loss': 0.11174482852220535, 'acc': 96.875, 'step': 16431},\n",
       " {'loss': 0.196702241897583, 'acc': 93.75, 'step': 16432},\n",
       " {'loss': 0.1620160937309265, 'acc': 93.75, 'step': 16433},\n",
       " {'loss': 0.13610683381557465, 'acc': 95.3125, 'step': 16434},\n",
       " {'loss': 0.2041475921869278, 'acc': 92.1875, 'step': 16435},\n",
       " {'loss': 0.1596284806728363, 'acc': 93.75, 'step': 16436},\n",
       " {'loss': 0.18986064195632935, 'acc': 93.75, 'step': 16437},\n",
       " {'loss': 0.20448100566864014, 'acc': 95.3125, 'step': 16438},\n",
       " {'loss': 0.19573122262954712, 'acc': 95.3125, 'step': 16439},\n",
       " {'loss': 0.18303468823432922, 'acc': 92.1875, 'step': 16440},\n",
       " {'loss': 0.16882070899009705, 'acc': 92.1875, 'step': 16441},\n",
       " {'loss': 0.2595444917678833, 'acc': 92.1875, 'step': 16442},\n",
       " {'loss': 0.11942601203918457, 'acc': 98.4375, 'step': 16443},\n",
       " {'loss': 0.23309172689914703, 'acc': 90.625, 'step': 16444},\n",
       " {'loss': 0.17542670667171478, 'acc': 93.75, 'step': 16445},\n",
       " {'loss': 0.08933420479297638, 'acc': 98.4375, 'step': 16446},\n",
       " {'loss': 0.14521272480487823, 'acc': 95.3125, 'step': 16447},\n",
       " {'loss': 0.04727000743150711, 'acc': 98.4375, 'step': 16448},\n",
       " {'loss': 0.13046106696128845, 'acc': 95.3125, 'step': 16449},\n",
       " {'loss': 0.17172060906887054, 'acc': 96.875, 'step': 16450},\n",
       " {'loss': 0.2261141538619995, 'acc': 92.1875, 'step': 16451},\n",
       " {'loss': 0.10942358523607254, 'acc': 96.875, 'step': 16452},\n",
       " {'loss': 0.11028086394071579, 'acc': 96.875, 'step': 16453},\n",
       " {'loss': 0.17154048383235931, 'acc': 93.75, 'step': 16454},\n",
       " {'loss': 0.22097164392471313, 'acc': 93.75, 'step': 16455},\n",
       " {'loss': 0.11841802299022675, 'acc': 96.875, 'step': 16456},\n",
       " {'loss': 0.1253519505262375, 'acc': 96.875, 'step': 16457},\n",
       " {'loss': 0.21643947064876556, 'acc': 92.1875, 'step': 16458},\n",
       " {'loss': 0.12251809984445572, 'acc': 92.1875, 'step': 16459},\n",
       " {'loss': 0.18611125648021698, 'acc': 95.3125, 'step': 16460},\n",
       " {'loss': 0.1116579994559288, 'acc': 96.875, 'step': 16461},\n",
       " {'loss': 0.35092368721961975, 'acc': 85.9375, 'step': 16462},\n",
       " {'loss': 0.13367252051830292, 'acc': 96.875, 'step': 16463},\n",
       " {'loss': 0.09950955957174301, 'acc': 98.4375, 'step': 16464},\n",
       " {'loss': 0.2595759928226471, 'acc': 87.5, 'step': 16465},\n",
       " {'loss': 0.14827860891819, 'acc': 96.875, 'step': 16466},\n",
       " {'loss': 0.21644152700901031, 'acc': 92.1875, 'step': 16467},\n",
       " {'loss': 0.1978500485420227, 'acc': 92.1875, 'step': 16468},\n",
       " {'loss': 0.26544585824012756, 'acc': 89.0625, 'step': 16469},\n",
       " {'loss': 0.1769862025976181, 'acc': 95.3125, 'step': 16470},\n",
       " {'loss': 0.13749714195728302, 'acc': 93.75, 'step': 16471},\n",
       " {'loss': 0.16287940740585327, 'acc': 93.75, 'step': 16472},\n",
       " {'loss': 0.08864383399486542, 'acc': 96.875, 'step': 16473},\n",
       " {'loss': 0.10954823344945908, 'acc': 98.4375, 'step': 16474},\n",
       " {'loss': 0.145100936293602, 'acc': 95.3125, 'step': 16475},\n",
       " {'loss': 0.18379712104797363, 'acc': 93.75, 'step': 16476},\n",
       " {'loss': 0.1228431761264801, 'acc': 93.75, 'step': 16477},\n",
       " {'loss': 0.19548299908638, 'acc': 93.75, 'step': 16478},\n",
       " {'loss': 0.0873265191912651, 'acc': 95.3125, 'step': 16479},\n",
       " {'loss': 0.10877560824155807, 'acc': 96.875, 'step': 16480},\n",
       " {'loss': 0.2619822919368744, 'acc': 90.625, 'step': 16481},\n",
       " {'loss': 0.1696365773677826, 'acc': 95.3125, 'step': 16482},\n",
       " {'loss': 0.12319190055131912, 'acc': 96.875, 'step': 16483},\n",
       " {'loss': 0.25370293855667114, 'acc': 90.625, 'step': 16484},\n",
       " {'loss': 0.16016553342342377, 'acc': 92.1875, 'step': 16485},\n",
       " {'loss': 0.15792934596538544, 'acc': 95.3125, 'step': 16486},\n",
       " {'loss': 0.14279112219810486, 'acc': 92.1875, 'step': 16487},\n",
       " {'loss': 0.08500491082668304, 'acc': 96.875, 'step': 16488},\n",
       " {'loss': 0.28759726881980896, 'acc': 90.625, 'step': 16489},\n",
       " {'loss': 0.22168216109275818, 'acc': 95.3125, 'step': 16490},\n",
       " {'loss': 0.17433074116706848, 'acc': 93.75, 'step': 16491},\n",
       " {'loss': 0.0985899269580841, 'acc': 95.3125, 'step': 16492},\n",
       " {'loss': 0.23418867588043213, 'acc': 89.0625, 'step': 16493},\n",
       " {'loss': 0.20037998259067535, 'acc': 92.1875, 'step': 16494},\n",
       " {'loss': 0.2034500688314438, 'acc': 90.625, 'step': 16495},\n",
       " {'loss': 0.1399570256471634, 'acc': 95.3125, 'step': 16496},\n",
       " {'loss': 0.1276516169309616, 'acc': 95.3125, 'step': 16497},\n",
       " {'loss': 0.21457539498806, 'acc': 92.1875, 'step': 16498},\n",
       " {'loss': 0.187803715467453, 'acc': 90.625, 'step': 16499}]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history['train'][-100:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.741226Z",
     "start_time": "2025-06-26T01:45:37.737721Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'loss': 2.2991281925201417, 'acc': 11.84, 'step': 0},\n",
       " {'loss': 0.7857092198848724, 'acc': 68.32, 'step': 500},\n",
       " {'loss': 0.5564688172578811, 'acc': 79.7, 'step': 1000},\n",
       " {'loss': 0.4719520664691925, 'acc': 82.9, 'step': 1500},\n",
       " {'loss': 0.42235635347366335, 'acc': 85.0, 'step': 2000},\n",
       " {'loss': 0.4027762630462646, 'acc': 85.76, 'step': 2500},\n",
       " {'loss': 0.3738447516202927, 'acc': 86.46, 'step': 3000},\n",
       " {'loss': 0.3771258469581604, 'acc': 86.0, 'step': 3500},\n",
       " {'loss': 0.3507035539627075, 'acc': 87.52, 'step': 4000},\n",
       " {'loss': 0.3341872264862061, 'acc': 87.86, 'step': 4500},\n",
       " {'loss': 0.3234550904035568, 'acc': 87.98, 'step': 5000},\n",
       " {'loss': 0.33969264595508575, 'acc': 87.58, 'step': 5500},\n",
       " {'loss': 0.32743885420560837, 'acc': 88.4, 'step': 6000},\n",
       " {'loss': 0.30822341849803925, 'acc': 88.68, 'step': 6500},\n",
       " {'loss': 0.2966441298365593, 'acc': 89.3, 'step': 7000},\n",
       " {'loss': 0.29481732356548307, 'acc': 89.46, 'step': 7500},\n",
       " {'loss': 0.3128455562710762, 'acc': 89.18, 'step': 8000},\n",
       " {'loss': 0.2903494042158127, 'acc': 89.32, 'step': 8500},\n",
       " {'loss': 0.31236501495838165, 'acc': 89.1, 'step': 9000},\n",
       " {'loss': 0.2788079459905624, 'acc': 89.84, 'step': 9500},\n",
       " {'loss': 0.29496090329289437, 'acc': 89.54, 'step': 10000},\n",
       " {'loss': 0.2823974539756775, 'acc': 89.92, 'step': 10500},\n",
       " {'loss': 0.27672662515640256, 'acc': 90.08, 'step': 11000},\n",
       " {'loss': 0.2726794681787491, 'acc': 90.22, 'step': 11500},\n",
       " {'loss': 0.27558619945049284, 'acc': 90.5, 'step': 12000},\n",
       " {'loss': 0.2751474692285061, 'acc': 89.92, 'step': 12500},\n",
       " {'loss': 0.26987960081100465, 'acc': 90.24, 'step': 13000},\n",
       " {'loss': 0.2761286378026009, 'acc': 89.92, 'step': 13500},\n",
       " {'loss': 0.2589208959013224, 'acc': 91.16, 'step': 14000},\n",
       " {'loss': 0.26899583384394643, 'acc': 90.16, 'step': 14500},\n",
       " {'loss': 0.25075976909697056, 'acc': 90.98, 'step': 15000},\n",
       " {'loss': 0.2694514476701617, 'acc': 90.24, 'step': 15500},\n",
       " {'loss': 0.26702945808172224, 'acc': 90.76, 'step': 16000}]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history['val'][-1000:-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘制损失曲线和准确率曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.744941Z",
     "start_time": "2025-06-26T01:45:37.741226Z"
    }
   },
   "outputs": [],
   "source": [
    "# 导入绘图库\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import font_manager\n",
    "def plot_learning_curves1(history):\n",
    "    # 设置中文字体支持\n",
    "    plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体\n",
    "    plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题\n",
    "\n",
    "    # 创建一个图形，包含两个子图（损失和准确率）\n",
    "    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))\n",
    "\n",
    "    # 绘制损失曲线\n",
    "    epochs = range(1, len(history['train_loss']) + 1)\n",
    "    ax1.plot(epochs, history['train_loss'], 'b-', label='训练损失')\n",
    "    ax1.plot(epochs, history['val_loss'], 'r-', label='验证损失')\n",
    "    ax1.set_title('训练与验证损失')\n",
    "    ax1.set_xlabel('轮次')\n",
    "    ax1.set_ylabel('损失')\n",
    "    ax1.legend()\n",
    "    ax1.grid(True)\n",
    "\n",
    "    # 绘制准确率曲线\n",
    "    ax2.plot(epochs, history['train_acc'], 'b-', label='训练准确率')\n",
    "    ax2.plot(epochs, history['val_acc'], 'r-', label='验证准确率')\n",
    "    ax2.set_title('训练与验证准确率')\n",
    "    ax2.set_xlabel('轮次')\n",
    "    ax2.set_ylabel('准确率 (%)')\n",
    "    ax2.legend()\n",
    "    ax2.grid(True)\n",
    "\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.816716Z",
     "start_time": "2025-06-26T01:45:37.744941Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAHACAYAAABqJx3iAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAqNVJREFUeJzs3QV4VGfWB/D/+MSDJSEQ3N0pUgot3lJ3925t27Lb7tJtu6XGtl/dt751L20pDsXd3SVASEKQhOhMMvM9570zIYEkRCa5I//f89xnJDOZm1zI3DPnvOcY3G63G0REREREREHEqPcOEBERERER+RoDHSIiIiIiCjoMdIiIiIiIKOgw0CEiIiIioqDDQIeIiIiIiIIOAx0iIiIiIgo6DHSIiIiIiCjoMNAhIiIiIqKgY0YAcLlcSElJQVRUFAwGg967Q0QUMmSm9MmTJ5GYmAijkZ+NefF9iYjI/9+bAiLQkTeTpKQkvXeDiChkHThwAE2bNtV7N/wG35eIiPz/vSkgAh35xMz7w0RHR1f5+U6nEzNnzsTIkSNhsVhqYQ/pbHgM9MdjoL9APAZZWVnqhN77d5g0fF8KDjwO+uMx0J8ziN+bAiLQ8ZYFyJtJdd9QwsPD1XMD5QAGGx4D/fEY6C+QjwHLs0rj+1Jw4HHQH4+B/pxB/N7EgmsiIiIiIgo6DHSIiIiIiCjoMNAhIiIiIqKgExBrdIjIf9s7FhYWoqioSO9dCZg6aLPZjPz8fL/5nZlMJrVPXINDRETBhoEOEVWLw+HA4cOHkZubq/euBFRgmJCQoDp1+VNgIYtQGzduDKvVqveuEBER+QwDHSKq1rDEvXv3qmyADOuSE2R/OnH3599bdnY2IiMj/WL4pgReErAeOXJEHc+2bdv6xX4RERH5AgMdIqoyOTmWk3bpYS/ZAKoc+Z3J785ut/tNQBEWFqbaie7fv79434iIiIKBf7zTElFA8peTdaoZHkciIgpGfHcjIiIiIqKgw0CHiIiIiIiCDgMdIqJqatGiBV5//XWffK958+aphg4nTpzwyfcLZgsWLMC4ceNUIwz5nU2ePPmMJgtPPfWU6iQna5CGDx+OnTt3lnrMsWPHcMMNNyA6OhqxsbG44447VKMIIiIKHgx0iCikDB06FA8//LBPvtfKlStx9913++R7UeXl5OSge/fueOedd8r8+ksvvYQ333wT77//PpYvX46IiAiMGjVKzS/ykiBn8+bNmDVrFqZMmaKCJx5LIqLgwq5rRESnZQNkmKcM0TybRo0a1ck+UWljxoxRW3nHT7JsTzzxBC655BJ13+eff474+HiV+bn22muxdetWTJ8+XQWqffr0UY956623MHbsWLz88ssqU0RERIEv6AOdtSsWYv/s/yITUcDYsXrvDlFQkpPLPGeRLq8dZjFVeobPrbfeivnz56vtjTfeUPd9+umnuO222zB16lR1crxx40bMnDlTtc4eP348li1bpjIIHTt2xKRJk1QZVMnSNckOeTNEsh8ffvgh/vjjD8yYMQNNmjTBK6+8gosvvrhaP9tPP/2kSrB27dqlyrAefPBB/O1vfyv++rvvvovXXntNDSCNiYnBueeeix9//FF9TS4nTpyonistwHv27Ilff/1VZTeCmcwDSk1NLXWc5HfTv39/LF26VAU6cinlat4gR8jjpfucZIAuu+yyM75vQUGB2ryysrLUpdPpVFtVeZ9TneeS7/A46I/HoHYUFrnw79+3oln9cNwzpGXQHYPK7mvQBzrGzGRc6vgdm9FG710hCloS5HR6aoYur73lmVEIt1buT5kENzt27ECXLl3wzDPPqPukfEn885//VJ/mt2rVCvXq1VPBg3zC//zzz8Nms6msgKwL2b59O5o1a1bua0hwIaVT//d//6eyBFIiJTNq6tevX6Wfa/Xq1bj66qvx9NNP45prrsGSJUtw3333oUGDBipgW7VqFf7617/iiy++wMCBA9Wak4ULF6rnHj58GNddd53aDzlpP3nypPqaBKTBToIcIRmckuS292tyGRcXV+rrksGTY+R9zOkkyJVjezoJimsyS0pK50h/PA764zHwrV2ZwPdbzDDAjZhjWxFtDa5jkJubW6nHBX2gY7JHqksbTn0SR0ShST7Zt1qt6sQ0ISFB3bdt2zZ1KYHPiBEjih8rJ72yDsTr2WefxS+//ILffvsNDzzwQLmvIUGIBBnihRdeUGtFVqxYgdGjR1dpX1999VVccMEFePLJJ9Xtdu3aYcuWLSqAktdITk5W2ZmLLroIUVFRaN68ucraeAOdwsJCXH755ep+0bVr1yq9PpU2YcIEleErmdGRrN/IkSNVQ4PqfBopJxXyb04GtpI+eBz0x2NQO96bvwfYsgtuGGBo2g1j+zQNqmPgzaoj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",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history, sample_step=500)  #横坐标是 steps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:45:37.818553Z",
     "start_time": "2025-06-26T01:45:37.816716Z"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-26T01:48:40.300725Z",
     "start_time": "2025-06-26T01:48:39.548524Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(89.89, 0.286341476392746)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在测试集上评估模型\n",
    "test_accuracy = evaluate_model(model, test_loader, device, loss_fn)\n",
    "test_accuracy\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
